<%@ page pageEncoding="UTF-8" %>
<%@ page import="ia.*" %>
<%@ page import="util.*" %>
<%@ page import="entidades.*" %>

<%@ page import="java.util.Date" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.io.PrintStream" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="com.google.gson.Gson" %>

<%
// Se obtiene la variable que indica el tipo de servicio solicitado.
String svc = request.getParameter("service");

if(svc != null)
    {
	String resultado = "";

	try{
		// El servicio 'estimar' calcula las bolsas por mes de los formatos para todos los pedidos comprendidos en un determinado periodo de tiempo.
		if(svc.compareTo("estimar") == 0)
			{
			Date fecha1 = Util.parseDate(request.getParameter("fecha1"));
			Date fecha2 = Util.parseDate(request.getParameter("fecha2"));
			resultado = Json.getOkMsj("bolsas", OrdenTrabajo.getDemandaDiariaFormatos(fecha1, fecha2));	
			}

		// El servicio 'estadisticas' calcula las proporciones de los formatos para todos los pedidos comprendidos en un determinado periodo de tiempo.
		if(svc.compareTo("estadisticas") == 0)
			{
			Date fecha1 = Util.parseDate(request.getParameter("fecha1"));
			Date fecha2 = Util.parseDate(request.getParameter("fecha2"));
			resultado = Json.getOkMsj("porcentajes", OrdenTrabajo.getEstadisticaFormatos(fecha1, fecha2));	
			}

		// El servicio 'calcular' utiliza un algoritmo evolutivo para calcular la distribucion optima.
		if(svc.compareTo("calcular") == 0)
			{
			String demandaAux = request.getParameter("demanda");
			String[] demanda = (demandaAux != null)? demandaAux.split(";") : null;

			if(demanda != null && demanda.length > 0)
				{
				HashMap<Integer,Float> map = new HashMap();

				for(int i=0; i<demanda.length; i++)
					{
					String[] da = demanda[i].split("=");
					if(da != null && da.length >= 2)
						{
						int id = Integer.parseInt(da[0]);
						float valor = Float.parseFloat(da[1]);
						map.put(id, valor);
						}

					Distribucion.setDemanda(map);
					Poblacion poblacion = new Poblacion(100);
					poblacion.evolucionar(150, 0.6f, 0.15f, 0.15f);

					resultado = poblacion.getSuperior().toJson();
					}
				}
			else
				{ resultado = Json.getErrorMsj("Se produjo un error inesperado: no se pudo acceder a la composicion de la demanda."); }
			}
		}catch(Exception e)
			{ resultado = Json.getErrorMsj(e); }

	out.print(resultado);
    }
%>

